package com.liinxin.flac_management.utils;

import cn.hutool.core.io.FileUtil;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;

public class ImgManage {

    /**
     * 根据传入的图片文件判断图片的类型
     *
     * @param imgFile
     * @return
     */
    public static String getImgExtName(File imgFile) {
        String imageExtName = FileUtil.getMimeType(String.valueOf(imgFile)).split("/")[1]; // 获取文件的MIME类型，并分割出后缀名
        // System.out.println("图片格式：" + imageExtName);
        return imageExtName;
    }

    /**
     * 判断图片格式是否为图片
     *
     * @param imgFile
     * @return
     */
    public static boolean isImg(File imgFile) {
        // 获取文件扩展名
        String imgExtName = getImgExtName(imgFile);

        if (imgExtName.equalsIgnoreCase("jpg")
                || imgExtName.equalsIgnoreCase("png")
                || imgExtName.equalsIgnoreCase("jpeg")) {
            // 是音乐格式
            return true;
        } else {
            return false;
        }
    }

    /**
     * 将图片转换为封面
     *
     * @param inputImgFile
     * @param outputDir
     * @param Height
     */
    public static File createImgCover(String inputImgFile, String outputDir, int Height) {
        try {
            // 读取原始图片
            File inputFile = new File(inputImgFile);
            BufferedImage inputImage = ImageIO.read(inputFile);

            // 获取原始图片的类型和位深度
            int type = inputImage.getType();

            // 计算宽度缩放比例
            double widthScale = (double) Height / inputImage.getHeight();

            // 计算新的宽度
            int newWidth = (int) (inputImage.getWidth() * widthScale);

            // 根据原始图片的类型创建新的图片对象
            BufferedImage outputImage = new BufferedImage(newWidth, Height, type);

            // 创建绘图对象
            Graphics2D graphics2D = outputImage.createGraphics();

            // 绘制缩放后的图片
            /*
            // SCALE_SMOOTH
            graphics2D.drawImage(inputImage.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
            graphics2D.dispose();
            */

            /*
            // AREA_AVAGING
            graphics2D.drawImage(inputImage.getScaledInstance(newWidth, newHeight, Image.SCALE_AREA_AVERAGING), 0, 0, null);
            graphics2D.dispose();
            */

            /*
            // 设置抗锯齿提示
            graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

            // 使用AREA_AVERAGING缩放方法来保持细节
            graphics2D.drawImage(inputImage.getScaledInstance(newWidth, newHeight, Image.SCALE_AREA_AVERAGING), 0, 0, null);
            graphics2D.dispose();
            */

            // 设置抗锯齿提示
            graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

            // 使用双线性插值缩放图像
            Image scaledImage = inputImage.getScaledInstance(newWidth, Height, Image.SCALE_SMOOTH);
            graphics2D.drawImage(scaledImage, 0, 0, null);
            graphics2D.dispose();

            // 将缩放后的图片保存到输出路径
            File outputFile = new File(outputDir + "\\\\cover.png");
            ImageIO.write(outputImage, "png", outputFile);

            return outputFile;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}
